<?php
/**
 * Created by a front-end programmer.
 * User: Xwen
 * Date: 2018/1/23
 * Time: 9:47
 * Mail:lauwencn@gmail.com
 */
header("Content-type: text/html; charset=utf-8");
final class LAUWENPHP{
    public static function run(){
        self::_set_const();             // 设置框架常量
        defined('DEBUG') || define('DEBUG', false);      // 判断DEBUG是否被用户定义，没有则设置默认值
        if(DEBUG){
            self::_create_dir();            // 创建用户应用目录
            self::_import_file();           // 载入框架所必需文件
        }else{
            error_reporting(0);
            include TEMP.'/~boot.php';
        }
        Application::run();             //
    }


    /**
     * 设置框架常量（主要是框架路径常量）
     */
    private static function _set_const(){
        /**
         * 框架路径常量
         */
        $path = str_replace('\\', '/', __FILE__);         // 当前文件目录路径
        define('LAUWENPHP_PATH', dirname($path));                               // 框架目录路径
        define('CONFIG_PATH', LAUWENPHP_PATH.'/Config');                        // 框架配置文件目录路径
        define('DATA_PATH', LAUWENPHP_PATH.'/Data');                            // 框架资源文件目录路径
        define('LIB_PATH', LAUWENPHP_PATH.'/Lib');                              // 框架类、方法目录路径
        define('TPL_PATH', DATA_PATH.'/Tpl');                                   // 框架模板目录路径
        define('CORE_PATH', LIB_PATH.'/Core');                                  // 框架核心类目录路径
        define('FUNCTION_PATH', LIB_PATH.'/Function');                          // 框架方法目录路径
        define('EXTENDS_PATH', LAUWENPHP_PATH.'/Extends');                      // 框架自带扩展目录
        define('ORG_PATH', EXTENDS_PATH.'/Org');                                // 框架自带第三方扩展目录
        define('TOOL_PATH', EXTENDS_PATH.'/Tool');                              // 框架自带工具类

        define('ROOT_PATH', dirname(LAUWENPHP_PATH));                      // 项目根目录路径
        /**
         * 临时目录路径
         */
        define('TEMP_PATH',ROOT_PATH.'/Temp');
        define('APP_COMPILE_PATH',TEMP_PATH.'/'.APP_NAME.'/Compile');
        define('APP_CACHE_PATH',TEMP_PATH.'/'.APP_NAME.'/Cache');
        /**
         * 日志目录路径
         */
        define('LOG_PATH',TEMP_PATH.'/Log');
        /**
         * 创建公共文件目录
         */
        define('COMMON_PATH',ROOT_PATH.'/Common');
        define('COMMON_MODEL_PATH',COMMON_PATH.'/Model');                       // 公共model文件
        define('COMMON_CONFIG_PATH',COMMON_PATH.'/Config');                     // 公共配置文件
        define('COMMON_LIB_PATH',COMMON_PATH.'/Lib');                           // 公共类库文件


        /**
         * 用户应用目录路径常量
         */
        define('APP_PATH', ROOT_PATH.'/'.APP_NAME);                             // 当前运行应用目录路径（APP_NAME在项目入口文件中定义）
        define('APP_CONFIG_PATH', APP_PATH.'/Config');                          // 用户应用目录配置文件目录路径
        define('APP_CONTROLLER_PATH', APP_PATH.'/Controller');                  // 用户控制器文件目录路径
        define('APP_TPL_PATH', APP_PATH.'/Tpl');                                // 用户应用模板文件目录路径
        define('APP_PUBLIC_PATH', APP_TPL_PATH.'/Public');                      // 用户公共资源文件目录路径（js/css等）
        define('APP_JS_PATH', APP_PUBLIC_PATH.'/js');                           // 用户公共资源js文件目录路径
        define('APP_CSS_PATH', APP_PUBLIC_PATH.'/css');                         // 用户公共资源css文件目录路径
        define('APP_IMAGE_PATH', APP_PUBLIC_PATH.'/image');                     // 用户公共资源图片文件目录路径
        define('APP_FONT_PATH', APP_PUBLIC_PATH.'/font');                       // 用户公共资源字体文件目录路径

        /**
         * 框架版本
         */
        define('LAUWENPHP_VERSION','1.0');

        /**
         * IS_POST常量、IS_AJAX常量
         */
        define('IS_POST',($_SERVER['REQUEST_METHOD'] == 'POST') ? true : false);
        if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH']=='XMLHttpRequest'){
            define('IS_AJAX',true);
        }else{
            define('IS_AJAX',false);
        }


    }

    /**
     * 创建用户应用目录
     */
    private static function _create_dir(){
        $dirArr = array(
            COMMON_PATH,
            COMMON_MODEL_PATH,
            COMMON_CONFIG_PATH,
            COMMON_LIB_PATH,
            APP_PATH,
            APP_CONFIG_PATH,
            APP_CONTROLLER_PATH,
            APP_TPL_PATH,
            APP_PUBLIC_PATH,
            APP_JS_PATH,
            APP_CSS_PATH,
            APP_IMAGE_PATH,
            APP_FONT_PATH,
            TEMP_PATH,
            APP_COMPILE_PATH,
            APP_CACHE_PATH,
            LOG_PATH
        );
        foreach ($dirArr as $v){
            is_dir($v) || mkdir($v, 0777, true);
            $path = $v.'/index.html';
            $str = <<<str
<html>
    <head>
        <title>小调皮</title>
    </head>
    <body>走错地方了哦！</body>
</html>
str;
            is_file($path) || file_put_contents($path,$str);
        }
        is_file(APP_TPL_PATH.'/success.html') || copy(TPL_PATH.'/success.html',APP_TPL_PATH.'/success.html');
        is_file(APP_TPL_PATH.'/error.html') || copy(TPL_PATH.'/error.html',APP_TPL_PATH.'/error.html');
    }

    /**
     * 载入框架所必需文件
     */
    private static function _import_file(){
        $fileArr = array(
            CORE_PATH.'/Log.class.php',
            FUNCTION_PATH.'/function.php',
            ORG_PATH.'/Smarty/Smarty.class.php',
            CORE_PATH.'/SmartyView.class.php',
            CORE_PATH.'/Controller.class.php',
            CORE_PATH.'/Application.class.php'
        );
        $str = '';
        foreach ($fileArr as $v){
            $str .= trim(substr(file_get_contents($v),5, -2));
            require_once "$v";
        }
        $str = "<?php\r\n".$str."\n\r?>";
        file_put_contents(TEMP_PATH."/~boot.php", $str) || die('access not allow');
    }


}

LAUWENPHP::run();

?>






































